export enum AIModelTagsConstant {
  TEXT_CONVERSATION = 0b01, // 文本对话
  IMAGE_GENERATION = 0b10, // 图片生成
  MULTI_MODAL = 0b100, // 多模态
  IMAGE_ANALYSIS = 0b1000, // 图像分析
  FILE_ANALYSIS = 0b10000, // 文件分析
  NETWORK = 0b100000, // 联网
}

// 定义标签名称类型
export type AIModelTagName = "文本对话" | "联网" | "多模态" | "图像分析";

// 定义标签映射类型
export type AIModelTagsMap = {
  [key in AIModelTagName]: number;
};

// 标签值映射
export const tags: AIModelTagsMap = {
  文本对话: AIModelTagsConstant.TEXT_CONVERSATION,
  联网: AIModelTagsConstant.NETWORK,
  多模态: AIModelTagsConstant.MULTI_MODAL,
  图像分析: AIModelTagsConstant.IMAGE_ANALYSIS,
};

/**
 * 检查模型是否支持指定的功能
 * @param modelTags 模型的标签值（十进制）
 * @param feature 要检查的功能（二进制枚举值）
 * @returns 是否支持该功能
 */
export const hasFeature = (
  modelTags: number,
  feature: AIModelTagsConstant
): boolean => {
  return (modelTags & feature) === feature;
};

/**
 * 获取模型支持的所有功能标签
 * @param modelTags 模型的标签值（十进制）
 * @returns 支持的功能标签数组
 */
export const getSupportedFeatures = (modelTags: number): AIModelTagName[] => {
  const supportedFeatures: AIModelTagName[] = [];

  // 检查每个标签是否支持
  if (hasFeature(modelTags, AIModelTagsConstant.TEXT_CONVERSATION)) {
    supportedFeatures.push("文本对话");
  }

  if (hasFeature(modelTags, AIModelTagsConstant.NETWORK)) {
    supportedFeatures.push("联网");
  }

  if (hasFeature(modelTags, AIModelTagsConstant.MULTI_MODAL)) {
    supportedFeatures.push("多模态");
  }

  if (hasFeature(modelTags, AIModelTagsConstant.IMAGE_ANALYSIS)) {
    supportedFeatures.push("图像分析");
  }

  return supportedFeatures;
};

export enum AIChatRoleConstant {
  USER = "user",
  ASSISTANT = "ai",
  SYSTEM = "system",
}
export enum MessageType {
  IMAGE = "image",
  TEXT = "text",
}
export enum StreamEvent {
  CREATE_SESSION = "create_session",
  UPDATE_SESSION = "update_session",
  UPDATE_MESSAGE = "update_message",
  DATA = "data",
  DONE = "done",
}
// 二维码类型
export enum QrCodeType {
  LOGIN = 0, // 登录二维码
}

// 二维码状态
export enum QrCodeStatus {
  PENDING = 0, // 待扫描
  SCANNED = 1, // 已扫描
  EXPIRED = 2, // 已过期
}

// 设备类型
export enum DeviceType {
  UNKNOWN = 0, // 未知
  PHONE = 1, // 手机
  TABLET = 2, // 平板
  DESKTOP = 3, // 电脑
  TV = 4, // TV电视机
  WEB = 5, // Web浏览器
}
